package admin_content

import (
	"gitee.com/theegg/go-brick/app/model/content/node_comments"
	"gitee.com/theegg/go-brick/app/service/app"
	"gitee.com/theegg/go-brick/app/service/help/cstruct"
	"github.com/gin-gonic/gin"
	"strconv"
)

// @title GetNodeCategoryList
// @description 获取内容分类列表
// @return mix
func GetNodeCommentList(c *gin.Context) {
	// 检验参数
	var validaParams node_comments.NodeCommentsQueryParams
	if err := c.ShouldBind(&validaParams); err != nil {
		app.NewResponse(c).JsonReturn(false, "bind-json-"+err.Error(), nil)
		return
	}

	// 查询数据
	data, err := node_comments.GetDataList(cstruct.StructToMap(validaParams))
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", data)
	return
}

// @title GetNodeCategoryDetail
// @description 获取内容详情, 如果 ID不为０　是编辑, 如果　ID为0　是添加
// @return mix
func GetNodeCommentDetail(c *gin.Context) {
	idStr := c.PostForm("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
		return
	}

	data := make(map[string]interface{})

	// 如果有ID 返回数据详情
	if id > 0 {
		category, errGet := node_comments.GetItemById(id)
		if errGet != nil {
			app.NewResponse(c).JsonReturn(false, errGet.Error(), nil)
			return
		}
		data["item"] = category
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", data)
	return
}

func NodeCommentStatus(c *gin.Context) {
	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

// @title NodeCategoryDel
// @description 删除分类，删除所有的下级, 如果有内容存在，则移动到默认分类下
// @return mix
func NodeCommentDel(c *gin.Context) {
	item, err := getTargetItemFromParams(c)
	if err != nil {
		app.NewResponse(c).JsonReturn(false, err.Error(), nil)
	}

	errDel := item.DeleteItem()
	if errDel != nil {
		app.NewResponse(c).JsonReturn(false, errDel.Error(), nil)
		return
	}

	app.NewResponse(c).JsonReturn(true, "获取数据成功", nil)
	return
}

/** =========================== 辅助查询 ============================ **/
// @title getTargetItemFromParams
// @description 内置方法　通过参数id获取目标对象, 验证当前 登陆用户 是否可以操作 目标用户
func getTargetCommentFromParams(c *gin.Context) (*node_comments.NodeComments, error) {
	id := c.PostForm("id")
	if id == "" {
		return nil, app.NewError("对不起, 管理员ID不能为空")
	}

	// ID 转换格式
	int64Id, errParse := strconv.ParseInt(id, 10, 64)
	if errParse != nil {
		return nil, app.NewError("对不起, 目标用户ID格式不正确")
	}

	// 获取对象
	item, errTarget := node_comments.GetItemById(int64Id)
	if errTarget != nil {
		return nil, app.NewError(errTarget)
	}

	// 目标需要存在
	if item == nil {
		return nil, app.NewError("对不起, 目标不存在")
	}

	return item, nil
}
